マルチリージョンキーをサポートしたKMSを試してみた
AWSチームのすずきです。
AWS Key Management Service (KMS) がマルチリージョンキーをサポート、 カスタムキーを異なるリージョンに複製した利用が可能になりました。
KMSのマルチリージョンキーを作成して、AWSCLIを利用したクライアントサイド暗号化(CSE)を実施、 異なるリージョンで復号可能なことを試す機会がありましたので、紹介させていただきます。
Encrypt global data client-side with AWS KMS multi-Region keys
マルチリージョンキーの作製
KMSのカスタムキーの作成時、詳細オプションで「マルチリージョンキー」の指定が可能になりました。
マルチリージョンキー、リージョンごとのレプリカキーの設定が可能です。
東京リージョンで作成したマルチリージョンキーを異なるリージョン(オレゴン、大阪)に複製しました。
マルチリージョンキーは新規作成時のみ設定可能。 KeyId、KeyArnのプリフィックスとして「mrk」が付与されたものが「マルチリージョンキー」と判別できる模様です。
CLI確認
作成したマルチリージョンキーの確認を試みました。
異なるリージョンに、同一のKeyIDの鍵が展開されている事が確認できました。
$ aws --region ap-northeast-1 kms list-keys | jq '.Keys[] | select(.KeyId=="mrk-00000000000000000000000000000000")| .' { "KeyId": "mrk-00000000000000000000000000000000", "KeyArn": "arn:aws:kms:ap-northeast-1:000000000000:key/mrk-00000000000000000000000000000000" } $ aws --region us-west-2 kms list-keys | jq '.Keys[] | select(.KeyId=="mrk-00000000000000000000000000000000")| .' { "KeyId": "mrk-00000000000000000000000000000000", "KeyArn": "arn:aws:kms:us-west-2:000000000000:key/mrk-00000000000000000000000000000000" }
CSE確認
AWS CLIの kms encrypt
を利用して、クライアントサイド暗号化(CSE)の動作確認を試みました。
暗号化
東京、オレゴンのそれぞれのリージョンの鍵を利用して、暗号化を行いました。
echo 'hello ap-northeast-1' > /tmp/hello-ap-northeast-1.txt echo 'hello us-west-2' > /tmp/hello-us-west-2.txt
aws --region ap-northeast-1 kms encrypt \ --key-id mrk-00000000000000000000000000000000 \ --plaintext fileb:///tmp/hello-ap-northeast-1.txt \ --output text \ --query CiphertextBlob | base64 --decode > /tmp/encrypted-ap-northeast-1.txt aws --region us-west-2 kms encrypt \ --key-id mrk-00000000000000000000000000000000 \ --plaintext fileb:///tmp/hello-us-west-2.txt \ --output text \ --query CiphertextBlob | base64 --decode > /tmp/encrypted-us-west-2.txt
$ ls -la /tmp/encrypted-* -rw-rw-r-- 1 cloudshell-user cloudshell-user 173 Jun 17 12:13 /tmp/encrypted-ap-northeast-1.txt -rw-rw-r-- 1 cloudshell-user cloudshell-user 168 Jun 17 12:13 /tmp/encrypted-us-west-2.txt
復号化
東京、オレゴンのどちらのリージョンでも、復号可能な事を確認できました。
$ aws --region ap-northeast-1 kms decrypt \ > --ciphertext-blob fileb:///tmp/encrypted-ap-northeast-1.txt \ > --output text \ > --query Plaintext | base64 --decode hello ap-northeast-1 $ aws --region us-west-2 kms decrypt \ > --ciphertext-blob fileb:///tmp/encrypted-us-west-2.txt \ > --output text \ > --query Plaintext | base64 --decode hello us-west-2 $ aws --region ap-northeast-1 kms decrypt \ > --ciphertext-blob fileb:///tmp/encrypted-us-west-2.txt \ > --output text \ > --query Plaintext | base64 --decode hello us-west-2 $ aws --region us-west-2 kms decrypt \ > --ciphertext-blob fileb:///tmp/encrypted-ap-northeast-1.txt \ > --output text \ > --query Plaintext | base64 --decode hello ap-northeast-1
まとめ
従来、KMSのカスタムキーを利用してCSEで暗号化すると、 KMSキーを登録したリージョン障害の影響を回避出来ないリスクがありましたが、 マルチリージョンキーを利用する事で、リージョン障害に備えたDRが実現しやすくなりました。
また、S3、DynamoDBなどのサーバサイドの暗号化(SSE)で複数リージョンを利用する場合にも、 マルチリージョンキーを採用する事で、管理性などが向上する事が期待できます。
従来の単一リージョンキーからマルチリージョンキーへの変換はサポートされていないため、 KMSのカスタムキーを新規に作成する際、将来的にDRなどでマルチリージョン利用の可能性がある場合は、 マルチリージョンキーをお試しください。